<?php
@header('Content-Type: text/html; charset=UTF-8');
include("../confing/common.php");
require_once("epay/notify.class.php");

// 创建日志目录
if (!is_dir("../logs")) {
    mkdir("../logs", 0755, true);
}

// 记录所有输入数据
file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 请求方式: ".$_SERVER['REQUEST_METHOD']."\n", FILE_APPEND);
file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." GET参数: ".json_encode($_GET)."\n", FILE_APPEND);
file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." POST参数: ".json_encode($_POST)."\n", FILE_APPEND);
file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 原始输入: ".file_get_contents("php://input")."\n", FILE_APPEND);

// 获取订单号，优先从GET，然后从POST，最后从原始输入
$out_trade_no = '';
if (isset($_GET['out_trade_no']) && !empty($_GET['out_trade_no'])) {
    $out_trade_no = trim(strip_tags(daddslashes($_GET['out_trade_no'])));
} elseif (isset($_POST['out_trade_no']) && !empty($_POST['out_trade_no'])) {
    $out_trade_no = trim(strip_tags(daddslashes($_POST['out_trade_no'])));
} else {
    // 尝试从原始输入解析
    $input = file_get_contents("php://input");
    if (!empty($input)) {
        parse_str($input, $params);
        if (isset($params['out_trade_no']) && !empty($params['out_trade_no'])) {
            $out_trade_no = trim(strip_tags(daddslashes($params['out_trade_no'])));
        }
    }
}

$date = DateTime::createFromFormat('U.u', microtime(true))->setTimezone(new DateTimeZone('Asia/Shanghai'))->format("Y-m-d H:i:s--u");
$type0 = isset($_GET['type0']) ? $_GET['type0'] : (isset($_POST['type0']) ? $_POST['type0'] : '');

file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 解析后订单号: {$out_trade_no}\n", FILE_APPEND);

// 如果订单号仍为空，检查最近10分钟内的待支付订单
if (empty($out_trade_no) && $type0 === 'tourist') {
    file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 尝试查找最近的tourist待支付订单\n", FILE_APPEND);
    $time = date("Y-m-d H:i:s", strtotime("-10 minutes"));
    $recent_orders = $DB->query("SELECT out_trade_no FROM qingka_wangke_pay WHERE status=0 AND addtime > '$time' ORDER BY id DESC LIMIT 5");
    $possible_orders = [];
    while ($row = $DB->fetch($recent_orders)) {
        $possible_orders[] = $row['out_trade_no'];
    }
    
    if (!empty($possible_orders)) {
        $out_trade_no = $possible_orders[0]; // 使用最近的一个
        file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 使用最近的订单: {$out_trade_no}\n", FILE_APPEND);
    }
}

if (empty($out_trade_no)) {
    file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 无法获取订单号\n", FILE_APPEND);
    echo "success"; // 返回success避免重复通知
    exit();
}

// 获取订单和用户信息
$order = $DB->get_row("select * from qingka_wangke_pay where out_trade_no = '{$out_trade_no}' ");
if(!$order) {
    file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 订单不存在: {$out_trade_no}\n", FILE_APPEND);
    echo "success"; // 返回success避免重复通知
    exit();
}

$uid = $order["uid"];
if($uid && $uid !== '1' && $type0 === 'tourist'){
    $user_result = $DB->get_row("select payData from qingka_wangke_user where uid = '{$uid}' ");
    $user_payData = json_decode($user_result["payData"], true);
    $alipay_config['apiurl'] = $user_payData['epay_api'];
    $alipay_config['partner'] = $user_payData['epay_pid'];
    $alipay_config['key'] = $user_payData['epay_key'];
}

// 获取交易状态和金额，从GET/POST/输入参数中获取
$trade_no = isset($_GET['trade_no']) ? $_GET['trade_no'] : (isset($_POST['trade_no']) ? $_POST['trade_no'] : '');
$trade_status = isset($_GET['trade_status']) ? $_GET['trade_status'] : (isset($_POST['trade_status']) ? $_POST['trade_status'] : 'TRADE_SUCCESS'); // 默认假定成功
$money = isset($_GET['money']) ? $_GET['money'] : (isset($_POST['money']) ? $_POST['money'] : $order['money']); // 使用订单金额
$type = isset($_GET['type']) ? $_GET['type'] : (isset($_POST['type']) ? $_POST['type'] : '');

// 记录参数
file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 处理参数: 订单号={$out_trade_no}, 交易号={$trade_no}, 状态={$trade_status}, 金额={$money}\n", FILE_APPEND);

// 不使用验证，直接处理订单
$srow = $DB->get_row("SELECT * FROM qingka_wangke_pay WHERE `out_trade_no`='$out_trade_no' LIMIT 1 FOR UPDATE");
if (!$srow) {
    file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 查询订单失败: {$out_trade_no}\n", FILE_APPEND);
    echo "success";
    exit();
}

// 如果订单已处理，直接返回成功
if ($srow['status'] != 0) {
    file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 订单已处理: {$out_trade_no}, 状态: {$srow['status']}\n", FILE_APPEND);
    echo "success";
    exit();
}

$userrow = $DB->get_row("SELECT * FROM qingka_wangke_user WHERE uid='{$srow['uid']}'");
    
// 游客下单
if($type0 === 'tourist'){
    file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 游客下单处理: {$out_trade_no}\n", FILE_APPEND);
    
    // 更新支付状态
    $DB->query("UPDATE `qingka_wangke_pay` SET `status` ='1', `endtime` ='$date', `trade_no`='$trade_no' WHERE `out_trade_no`='$out_trade_no'");
    // 更新订单状态
    $DB->query("UPDATE `qingka_wangke_order` SET `status` ='待处理', `dockstatus` ='0',`paytime` = '$date' WHERE `out_trade_no`='$out_trade_no'");
    // 更新代理余额
    $DB->query("UPDATE `qingka_wangke_user` SET `money`=`money`-'{$srow['money2']}' WHERE `uid`='{$uid}'");
    // 记录日志
    wlog($uid, "游客下单", "商铺 ".$uid." | 游客成功下单,售价：{$money}，扣除店铺成本：{$srow['money2']}", -$srow['money2']);
    
    file_put_contents("../logs/notify_".date('Ymd').".log", date('Y-m-d H:i:s')." 订单处理成功: {$out_trade_no}\n", FILE_APPEND);
    echo "success";
    exit();
} else {
    echo "success";
    exit();
}
?>
